Главная страница » Блог » Изучение PHP

Массовое добавление значений атрибутов для продуктов в WooCommerce

Готовый скрипт

Ниже представлен листинг кода, для массового заполнения значений у конкретного атрибута:

    $taxanomy_slug = 'size'; // slug (ярлык) атрибута
    $file = dirname(__FILE__) . '/' . $taxanomy_slug . '.txt'; // файл с значениями атрибута на русском (каждое значение с новой строки)
    
    function gp_create_terms($taxanomy_slug, $name, $slug){
        global $wpdb;

        $taxanomy_slug = 'pa_' . $taxanomy_slug;
    
        $wp_terms_table = $wpdb->prefix . 'terms'; // wp_terms
        $wp_terms_data = [
            // term_id -- AUTO_INCREMENT
            'name' => $name,
            'slug' => $slug,
            'term_group' => 0,
        ];
    
        $res = $wpdb->insert( $wp_terms_table, $wp_terms_data);
        $new_term_id = $wpdb->insert_id; // получаем ID термина, сгенерированного при вставке в wp_terms
    
        $wp_term_taxonomy_table = $wpdb->prefix . 'term_taxonomy'; // wp_term_taxonomy
        $wp_term_taxonomy_data = [
            'term_taxonomy_id' => $new_term_id, // хотя term_taxonomy_id -- AUTO_INCREMENT
            'term_id' => $new_term_id,
            'taxonomy' => $taxanomy_slug,
            'description' => '',
            'parent' => 0,
            'count' => 0,
        ];
        
        $res = $wpdb->insert( $wp_term_taxonomy_table, $wp_term_taxonomy_data);
        return $res;
    }
    
    $handle = fopen($file, 'r');
    if ($handle)
    {
        while (($line = fgets($handle)) !== false) {
            $name = $line;
            $slug = sanitize_title($line);
            $res = gp_create_terms($taxanomy_slug, $name, $slug);
        }
        fclose($handle);
    }

Подготовительные работы

Для начала нужно подготовить файл со значениями атрибута на русском (каждое значение с новой строки) и заложить его в корень активной темы:

Массовое добавление значений атрибутов для продуктов в WooCommerce
Скриншот файла со значениями заданными с каждой новой строку

Далее приведенный выше код скрипта можно поместить в functions.php или в любой запускаемый php-файл. В скрипте задать значение таксаномии в переменную $taxanomy_slug в виде строки типа: pa_{attribute}, где {attribute} — slug атрибута):

$taxanomy_slug = 'pa_size'; // slug атрибута, взять из url
Массовое добавление значений атрибутов для продуктов в WooCommerce
Найти значение таксаномии можно наведя курсор на атрибут в браузере

Так же не забыть указать имя вашего файла со значениями в переменной $file:

$file = dirname(__FILE__) . '/sizes.txt'; // файл со значениями атрибута на русском (каждое значение с новой строки)

Теперь можно запускать скрипт и смотреть результат.

Внимание, код нужно прогонять один раз, иначе создадутся дубли с другими term_id.

Если что в базе можно последние ID в таблицах «wp_term_taxonomy» и «wp_terms«, чтобы была возможность удалить ошибочно созданные записи SQL-запросами вида:

DELETE FROM `wp_term_taxonomy` WHERE `wp_term_taxonomy`.`term_taxonomy_id`> 430;
DELETE FROM `wp_terms` WHERE `wp_terms`.`term_id`> 430;